/**
 * @file STLOG.h
 * @author Derek Liu (yjkhtddx@sina.com)
 * @brief 
 * @version 0.1
 * @date 2021-02-18
 * 
 * @copyright Copyright Sci-Tech Laboratories (c) 2021
 * 
 */

#ifndef __STLOG_H__
#define __STLOG_H__

// F       B
// 30      40      黑色
// 31      41      红色
// 32      42      绿色
// 33      43      黄色
// 34      44      蓝色
// 35      45      紫红色
// 36      46      青蓝色
// 37      47      白色

// 00无 01粗体 04下划线 05闪烁 07反转 08隐藏

#define STLOG_ESC_START "\033["
#define STLOG_ESC_END "\033[0m"
#define STLOG_COLOR_FATAL "31m"  //*致命 红色
#define STLOG_COLOR_ALERT "31m"  // 警报 红色
#define STLOG_COLOR_CRIT "31m"   // 暴击 红色
#define STLOG_COLOR_ERROR "31m"  //*错误 红色
#define STLOG_COLOR_WARN "33m"   //*警告 黄色
#define STLOG_COLOR_NOTICE "34m" //*通知 蓝色
#define STLOG_COLOR_INFO "32m"   //*信息 绿色
#define STLOG_COLOR_DEBUG "36m"  //*调试 青色
#define STLOG_COLOR_TRACE "37m"  // 痕迹 白色
#define STLOG_COLOR_LEND "\r\n" // 回车

// #define STLOG_COLOR_FATAL "31;40;5m"  //*致命 红色黑底闪烁
// #define STLOG_COLOR_ALERT "31;40;1m"  // 警报 红色黑底粗体
// #define STLOG_COLOR_CRIT "31;40;1m"   // 暴击 红色黑底粗体
// #define STLOG_COLOR_ERROR "31;40;1m"  //*错误 红色黑底粗体
// #define STLOG_COLOR_WARN "33;40;1m"   //*警告 黄色黑底粗体
// #define STLOG_COLOR_NOTICE "34;40;1m" //*通知 蓝色黑底粗体
// #define STLOG_COLOR_INFO "32;40;1m"   //*信息 绿色黑底粗体
// #define STLOG_COLOR_DEBUG "36;40;1m"  //*调试 青色黑底粗体
// #define STLOG_COLOR_DEBUG "36;40;1m"  //*痕迹 白色黑底粗体

// 痕迹
#define stlog_trace(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_TRACE "[TRACE %s:%d %s()] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

// 调试
#define stlog_debug(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_DEBUG "[DEBUG %s:%d %s()] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

// 信息
#define stlog_info(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_INFO "[INFO %s:%d %s()] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

// 注意 什么鬼
#define stlog_notice(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_NOTICE "[NOTICE %s:%d %s()] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

// 警告
#define stlog_warn(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_WARN "[WARN %s:%d %s()] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

// 错误
#define stlog_error(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_ERROR "[ERROR %s:%d %s()] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

// 暴击 什么鬼
#define stlog_crit(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_CRIT "[CRIT %s:%d %s] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

// 警报 什么鬼
#define stlog_alert(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_ALERT "[ALERT %s:%d %s] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

// 致命
#define stlog_fatal(format, args...) (printf(STLOG_ESC_START STLOG_COLOR_FATAL "[FATAL %s:%d %s] => " format STLOG_ESC_END STLOG_COLOR_LEND, __FILE__, __LINE__, __FUNCTION__, ##args))

#endif //__STLOG_H__